from clasesPrincipales.Instruccion import Instruccion
from clasesPrincipales.Kernel import Kernel
from clasesPrincipales.Programa import Programa
from memoriaFisica.asignacionContinua.AsignacionContinua import AsignacionContinua
from memoriaFisica.asignacionContinua.MMU import MMU
from memoriaFisica.asignacionContinua.PeorAjuste import PeorAjuste
from planificacion.Prioridad import Prioridad

def mainAsignacionPrioridad():
    # Programas e instrucciones
    prog = Programa('Google Chrome', [Instruccion(Instruccion.CPU, 1), 
                          Instruccion(Instruccion.IO, 1),
                          Instruccion(Instruccion.CPU, 1), 
                          Instruccion(Instruccion.IO, 3),
                          Instruccion(Instruccion.CPU, 5), 
                          Instruccion(Instruccion.EXIT)])
    prog1 = Programa('Eclipse', [Instruccion(Instruccion.IO, 5),
                           Instruccion(Instruccion.CPU, 2),
                           Instruccion(Instruccion.IO, 2),
                           Instruccion(Instruccion.EXIT)])
    
    # Scheduler
    prioridad = Prioridad ()
    # Ajuste
    peorAjuste = MMU(AsignacionContinua(PeorAjuste()))
    
    # Kernel
    kernel = Kernel(prioridad, peorAjuste)
    print('******************************************')
    print('******** El Kernel ha iniciado!!! ********')
    print('******************************************')
    print(prioridad)
    print ("El tipo de asignacion es: Peor Ajuste")
    
    kernel.leerPrograma(prog)
    kernel.leerPrograma(prog1)
    kernel.stop()
    print('******************************************')
    print('******** El Kernel ha finalizado! ********')
    print('******************************************')
        
mainAsignacionPrioridad ()